HTTP Verb Tampering
HTTP Verb Tampering利用接受 HTTP 动词和方法的 Web 服务器。可以通过使用意外方法发送恶意请求来利用此攻击,这可能导致绕过 Web 应用程序的授权机制,甚至绕过其针对其他 Web 攻击的安全控制。
HTTP 有9 种不同的动词,常用的 HTTP Verb
Verb | Description |
---|---|
GET |
请求特定资源。可以通过 URL 中的查询字符串将附加数据传递给服务器(例如?param=value )。 |
POST |
将数据发送到服务器。它可以处理多种类型的输入,例如文本、PDF 和其他形式的二进制数据。此数据附加在标头后面的请求正文中。POST 方法通常用于发送信息(例如表单/登录)或将数据(例如图像或文档)上传到网站。 |
HEAD |
请求向服务器发出 GET 请求时返回的标头。它不返回请求正文,通常用于在下载资源之前检查响应长度。 |
PUT |
在服务器上创建新资源。如果在未进行适当控制的情况下允许此方法,则会导致上传恶意资源。 |
DELETE |
删除 Web 服务器上的现有资源。如果没有得到妥善保护,可能会因删除 Web 服务器上的关键文件而导致拒绝服务 (DoS)。 |
OPTIONS |
返回有关服务器的信息,例如其接受的方法。 |
PATCH |
对指定位置的资源应用部分修改。 |
TRACE |
回显服务器收到的请求,主要用于测试或诊断。 |
CONNECT |
HTTP/1.1协议中预留给能够将连接改为隧道方式的代理服务器。通常用于SSL加密服务器的连接(经由非加密的HTTP代理服务器)。 |
Insecure Configurations
Web 服务器的身份验证配置可能仅限于特定的 HTTP 方法,这会导致某些 HTTP 方法无需身份验证即可访问。
Apache Web
Apache Web 服务器存在漏洞的配置示例,该配置位于站点配置文件(例如 000-default.conf
)或 .htaccess
网页配置文件中:
1 | <Directory "/var/www/html/admin"> |
此配置正在设置管理 Web 目录的授权配置。但是,由于使用了 <Limit GET>
关键字,Require valid-user
设置仅适用于 GET 请求,因此页面只能通过 POST
请求访问。即使同时指定了 GET
和 POST
,页面也只能通过其他方法访问,例如 HEAD
或 OPTIONS
。
Tomcat Web
以下示例显示了 Tomcat Web 服务器配置的相同漏洞:
1 | <security-constraint> |
此配置授权仅限于 GET
方法,这使得可以通过其他 HTTP 方法访问页面。
ASP.NET
以下是在 Web 应用程序的 web.config 文件中找到的 ASP.NET 配置的示例:
1 | <system.web> |
此配置中 allow
和 deny
范围仅限于GET
方法,这使得可以通过其他 HTTP 方法访问 Web 应用程序。
Insecure Coding
当 Web 开发人员应用特定过滤器来缓解特定漏洞,但未用该过滤器覆盖所有 HTTP 方法时,就会发生这种情况。以 PHP 为例:
1 | if (isset($_REQUEST['filename'])) { |
在$_REQUEST["code"]
其中包含GET
和POST
参数。如上过滤器,如果 GET 请求不包含任何坏字符,那么查询将被执行。